使用 move_from
從帳戶中獲取資源,並 destroy
該內容。
native fun move_from<T: key>(addr: address): T;
address 0x7 {
module Collection {
use 0x1::Vector;
use 0x1::Signer;
struct Item has drop {}
struct Collection has key {
items: vector<Item>
}
public fun size(account: &signer): u64 acquires Collection {
// 該資源不再附加在 account 上
let collection = move_from<Collection>(Signer::address_of(account));
// 這邊必須使用 resource value, 同時確保 items 擁有 drop 能力
let Collection { items: _ } = collection;
// 完成,該資源被成功銷毀
}
}
}
在考慮資源時,必須解構或作為返回值傳遞。但是即使傳遞到 script, 能操作的選項也是有限的,因為 scrip 上下文不允許對結構或資源做任何事情,除非將其傳遞到其他地方。
這一系列的範例在 Global Storage 章節其實已經介紹過每個 schema 能力,搭配著一起看和多幾次練習就可以靈活運用和設計 Module。
讓我們 Move to Day 21